package me.ydq.core.table;

import me.ydq.misc.Fn;

import java.util.Map;

/**
 * 更新表，支持多字段更新 或者 手写更新SQL语句
 */
public interface TableUpdate<T> {

    int update(Map<Fn<T, ?>, ?> updates);

    /**
     * 用于手写一些特殊的更新，满足一些 计算更新的场景，例如 在原来的金额上累加，或者将某个临时字段审核通过后复制给正式字段等
     *
     * @param rawSetSQLScript 手写的一些脚本，例如 amount = amount + 1000,avatar = tmp_avatar
     */
    int updateByScript(String rawSetSQLScript);

    default int update(Fn<T, ?> column, Object updateValue) {
        return update(Map.of(column, updateValue));
    }

    default int update(Fn<T, ?> column1, Object updateValue1, Fn<T, ?> column2, Object updateValue2) {
        return update(Map.of(column1, updateValue1, column2, updateValue2));
    }

    default int update(Fn<T, ?> column1, Object updateValue1, Fn<T, ?> column2, Object updateValue2, Fn<T, ?> column3, Object updateValue3) {
        return update(Map.of(column1, updateValue1, column2, updateValue2, column3, updateValue3));
    }


}
